Lazy loaded image
记录-MCP:Client-服务器回调Client模型
字数 1789阅读时长 5 分钟
2026-5-25
2026-5-25
AI智能摘要
GPT
这里是萌新 AI,这篇文章介绍了 MCP 开发中 Server 端如何调用 Client 端大模型生成的结果。文章先提出将模型 API 配置在 Server 端会导致模型固定、不易修改的问题,接着解释 Client 主要用于获取工具列表与交互,最后通过代码示例展示如何用 session.create_message 实现模型信息传递。
URL
type
Post
status
Published
date
May 25, 2026
slug
mcp client1
summary
MCP client
tags
实用教程
Python
大模型
推荐
category
大模型
icon
password
😀
这篇博客主要讲解MCP Server调用大模型的方法。一般情况下,博主会将模型的API和KEY配置在Server端。但是,这会造成一个问题:在实际业务中,客户使用产品时,有自己的偏好模型。如果博主设置在Server端,那么模型固定,不易修改。今天这篇博客主要记录MCP的Server端如何使用Client端大模型生成的结果。

📝 Client基本概念

在MCP开发中,我们很少去实现MCP Client端的代码。这是因为在日常开发中,我们很少将大模型的API和KEY授权给服务端,主要实现一些数学统计、文件删除、文件读取等功能。但是,随着MCP Server的发展,出现了一些工具,必须借助大模型完成总结、text2sql等的操作。

什么是Client?

博主个人认为MCP Client主要用于获取显示MCP Server端的工具集合、管控相关配置信息以及与Server进行交互。
那么,Client代码中主要有两个部分:获取目标Server的工具列表和执行目标Server工具。如果想要在此基础上实现模型生成信息传递,那么需要在执行目标Server工具中使用Server向Client发起请求的方法(session.create_message)。
上面这一段话有点绕口,也不是很直观。不要慌张,请伙伴们接着往下阅读。

🤗 代码

Client客户端有两个非常重要的部分:获取Server工具列表和执行目标Server工具。

简单例子

首先,需要导入mcp的streamable_http_client和ClientSession类。
streamable_http_client类作用如下:
  • 用于建立Client和Server之间的通信连接,返回read_stream、write_stream和get_session_id_callback。其中,read_stream获取Server端信息,write_stream向Server端写入信息,get_session_id_callback会话ID。两种方法:with streamable_http_client() as (read_stream, write_stream, session_id)和streamablehttp_client().__aenter__()。
    • with streamable_http_client() as (read_stream, write_stream, session_id)是自动上下文管理器相当于streamable_http_client().__aenter__()+streamable_http_client().__aexit__()。
    • 虽然with streamable_http_client() as (read_stream, write_stream, session_id)使用方便,但是当我们需要一个会话在不同地方调用时,那么需要使用的是streamable_http_client().__aenter__()和streamable_http_client().__aexit__()。
ClientSession类作用如下:
  • 建立与管理Client和Server之间的会话。两种方法:with ClientSession() as session 和 ClientSession().__aenter__()。
    • with ClientSession() as session是自动上下文管理器相当于ClientSession().__aenter__()+ClientSession().__aexit__()。
    • 虽然with ClientSession() as session使用方便,但是当我们需要一个会话在不同地方调用时,那么需要使用的是ClientSession().__aenter__()和ClientSession().__aexit__()。
  • ClientSession类有几个重要函数:initialize()、list_tools()、call_tool()
    • initialize():用于Client和Server的初始化握手。可以理解为:建立沟通通道。
    • list_tools():获取Server端的所有工具名称。
    • call_tool():调用Server端的目标工具。
  • Server端发起回调,两个构造函数:sampling_callback和elicitation_callback。
    • elicitation_callback:Server服务端需要获取用户的指令。
    • sampling_callback:Server服务端需要获取Client模型生成的文本数据。
注意
为了让streamable_http_client建立的网络连接能够持久一些,博主这里使用的streamable_http_client().__aenter__()+streamable_http_client().__aexit__()方法。
接着,创建Client和Server网络连接类。
再接着,使用with ClientSession() as session创建会话管理执行初始化握手、获取所有工具和调用工具。这里的Weather工具使用的是记录-MCP:FastMCP创建server方法(二)
最后,执行main函数。
notion image

复杂例子

上述简单例子中,Client和Server交互流程(排除初始握手)如下:
notion image
但是,博主想要实现Server能够回调Client的大模型。如下图:
notion image
首先,简单例子的基础上增加sampling_callback函数。
接着,将回调函数放入到async with ClientSession(read_stream, write_stream, sampling_callback=sampling_callback) as session_manager中。同时,我们也需要为cal_tool函数中的arguments增加参数。
再接着,客户端已经完成,但是需要完善Server中的工具函数的代码,增加session.create_message的使用。由于Weather工具使用的是FastMCP创建,所以博主依然使用该类进行补充。
最后,启动测试。
  • 客户端结果
notion image
  • 服务端结果
notion image
 
💡
欢迎您在底部评论区留言,一起交流~
上一篇
记录-MCP:FastMCP创建server方法(二)
下一篇
记录-MCP:Client-服务器行为用户确认

评论
Loading...